#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <cstdio>
#include<assert.h>


void handler(int signal){

    printf("已经捕捉到2号信号了\n");
    exit(0);
}


int main()
{
    sigset_t test_pending;
    sigemptyset(&test_pending);

    //设置sigaction结构的相关参数
    struct sigaction test_1, test_2;
    test_1.sa_handler = handler;
    test_1.sa_mask = test_pending;
    test_1.sa_flags = 0;
    //其余参数不需要操心

    //捕捉2号信号
    sigaction(2, &test_1, &test_2);

    while(true){

        printf("正在等待信号传递\n");
        sleep(1);
    }


    return 0;
}


// void show_pending(sigset_t *pending){
    
//     for (int i = 1; i<= 32; i++){
        
//         if (sigismember(pending, i) == 1) printf("1");
//         else printf("0");       
//     }

//     printf("\n");
// }

// int main()
// {
//     //创建并初始化两个位图
//     sigset_t test_block, test_pending, block_backup;
//     sigemptyset(&test_block);
//     sigemptyset(&test_pending);


//     //在test_block位图中添加2号信号，并通过sigprocmask()
//     //将test_block置为当前进程的block位图
//     sigaddset(&test_block, 2);
//     sigprocmask(SIG_SETMASK, &test_block, &block_backup);

//     signal(2,handler);

//     while(true){

//         //打印当前进程pending位图
//         sigpending(&test_pending);
//         show_pending(&test_pending);

//         printf("进程：%d 正在等待2号信号，并执行handler函数\n", getpid());
//         sleep(2);
//     }

//     return 0;
// }



// int main()
// {
//     struct sigaction test_1, test_2;

//     int check = sigaction();
//     assert(check != -1);

//     return 0;
// }
